home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 8 / FM Towns Free Software Collection 8.iso / t_os / gpen32k / source / src / gpen16.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-06-01  |  12.8 KB  |  563 lines

  1. /*****************************************************************
  2.  
  3.             G-Pen16    〔試作版〕    ver.0.720
  4.                             Copyright(C) 1991-1994 OKOME
  5. *****************************************************************/
  6.  
  7. #include    <stdio.h>
  8. #include    <stdlib.h>
  9. #include    <string.h>
  10. #include    <math.h>
  11. #include    <fmcfrb.h>
  12. #include    <EGB.H>
  13. #include    <MOS.H>
  14. #include    <kkstr2.h>
  15. #include    <normlib.h>
  16. #include    <okome.h>
  17. #define    MAIN
  18. #include    <GPen16.h>
  19. #undef    MAIN
  20.  
  21. void endu(void)
  22. {
  23.     if(message2(1, "G-Pen16を終了します", 2)==0)
  24.         end();
  25. }
  26.  
  27. void draw()        /*    画面初期化    */
  28. {
  29.     int i, x, y;
  30.     char c[64] = { 0x3210, 0x7654, 0xBA98, 0xFEDC };
  31.     char *tl[] = {"~","/","□","■","○","●","楕○","楕●","↑↓","←→",
  32.                 "Poly","塗","Copy","Roll","ぼけ","回転","拡縮","反転",
  33.                 "⇔","⇔重","~","Roll","色々","もわ" };
  34.     wpg(0);
  35.     EGB_tmenuPalette2( work );
  36.     MEN_sidein(2);        /*    メニューへのサイドワークの追加    */
  37.     MEN_set(2);
  38.     font12( 592, 16, "大", 15 );
  39.     font12( 615, 16, "終", 15 );
  40.     boxf( 0, 20, 639, 479, BCL );
  41.     KAN_disp(KAN_DISPON);
  42.     KAN_setMode(0x30140);
  43.     wpg(1);
  44.     EGB_displayStart( work, 2, bi, bi );
  45.     EGB_displayStart( work, 3, 640/bi, 480/bi );
  46.     egbputZ( CSX1, CSY1, CSX2, CSY2, 16, 1, c );
  47.     for ( y = 0; y < 2; y++ ) {
  48.         for ( i = 0; i < 8; i++ ) {
  49.             boxf( PALX +  i   *PALB  , PALY +  y   *PALB  ,
  50.                   PALX + (i+1)*PALB-1, PALY + (y+1)*PALB-1, y*8+i );
  51.         }
  52.     }
  53.     boxf( PCX1, PCY1, PCX2, PCY2, mcl[0] );
  54.     mbclp();
  55.     wpg(0);
  56.     biboxbf( WX1, WY1, WX2, WY2, 0, 8, 8 );
  57.     biboxbf( BX1, BY1, BX2, BY2, 0, 8, 8 );
  58.     biboxbf( NX1, NY1, NX2, NY2, 0, 4, 4 );
  59. /*    biboxbf( CBX1, CBY1, CBX2, CBY2, 0, 4, 4 );
  60.     biboxbf( CBLX1, CBLY1, CBLX2, CBLY2, 0, 2, 2 );
  61.     biboxbf( CBRX1, CBRY1, CBRX2, CBRY2, 0, 2, 2 );
  62. */    for ( i = 0; i < MEZ0; i++ ) {
  63.         x = i % MEX2;
  64.         y = i / MEX2;
  65.         uboxf( MEX1+MEX4*x, MEY1+MEY4*y,
  66.               MEX1+MEX4*(x+1)-1, MEY1+MEY4*(y+1)-1, 15, 8, (i<MEZ1) ? 7 : 12 );
  67.         symbol(MEX1+MEX4*x+MEX4/2-strlen(tl[i])*4,MEY1+MEY4*y+18,
  68.                tl[i], 16, 15 );
  69.     }
  70.     wkugiri(1);
  71.     biboxbf( PALX, PALY, PALX+127, PALY+PALB*3-1, 0, 4, 28 );
  72.     biboxbf( PCX1, PCY1, PCX2, PCY2, 0, 0, 0 );
  73.     biboxbf( PLX1, PLY1, PLX2, PLY2, 0, 0, 0 );
  74.     biboxbf( PRX1, PRY1, PRX2, PRY2, 0, 0, 0 );
  75.     ubox( SPX1, SPY1, SPX2, SPY2, 15, 8 );
  76.     font12( SPX1+6, SPY2-4, "SPOIT", 15 );
  77.     ubox( PAX1, PAY1, PAX2, PAY2, 8, 15 );
  78.     ubox( HX1, HY1, HX2, HY2, 8, 15 );
  79.     bfgs(1);
  80.     for (y=0; y<=2; y++)
  81.         mcolms(y);
  82.     wpg(1);
  83.     page(0);
  84. }
  85.  
  86. void gmenu( int mx, int my )        /*    アイコンMENU    */
  87. {
  88.     int x, y, i, j;
  89.     
  90.     i = (( mx - MEX1 ) / MEX4) + MEX2 * (( my - MEY1 ) / MEY4);
  91.     j = ( i<MEZ1 ) ? 0 : 1 ;
  92.     x = MEX1 +((mei[j] + j * MEZ1) % MEX2)* MEX4;
  93.     y = MEY1 + (mei[j] + j * MEZ1) / MEX2 * MEY4;
  94.     mei[j] = i - j * MEZ1;
  95.     mx = MEX1 +(i % MEX2)* MEX4;
  96.     my = MEY1 + i / MEX2 * MEY4;
  97.     wpg(0);
  98.     ubox(  x,  y,  x+MEX4-1,  y+MEY4-1, 15, 8 );
  99.     ubox( mx, my, mx+MEX4-1, my+MEY4-1, 8, 15 );
  100.     wpg(1);
  101. }
  102.  
  103. void mcolm( int mb, int mx, int my )        /*    カラー選択バー    */
  104. {
  105.     int i, j, c;
  106.     j = ( my - PALY*bi ) / ( PALB*bi );
  107.     i = ( 1 << ((2 - j) * 5) );
  108.     umosv(PALX, PALY+PALB*j, PALX+127, PALY+PALB*(j+1)-1 );
  109.     while (mb!=0)
  110.     {
  111.         MOS_rdpos( &mb, &mx, &my );
  112.         c = (mx - PALX*bi) / 8;
  113.         mcols((mcl[0] & (0xffff - 0x1f * i)) + c * i);
  114.     }
  115.     mosv(0, 0, 639, 479);
  116. }
  117.  
  118. void rollsub( int x3, int y3, int X1, int Y1, int X3, int Y3 )
  119. {
  120.     int X2, Y2, Y4;
  121.     X2 = X1+X3;
  122.     Y2 = Y1+Y3;
  123.     Y4 = Y3+1;
  124.     egbget( X1, Y1, X1+(x3-1 & X3), Y2, b );
  125.     egbget( X1+x3, Y1, X2, Y2, &(b[x3*Y4*2]) );
  126.     egbput( X2-(x3-1 & X3), Y2-(y3-1 & Y3), X2, Y2, b );
  127.     egbput( X2-(x3-1 & X3), Y1, X2, Y2-y3, &(b[x3*y3*2]) );
  128.     egbput( X1, Y2-(y3-1 & Y3), X2-x3, Y2, &(b[x3*Y4*2]) );
  129.     egbput( X1, Y1, X2-x3, Y2-y3, &(b[(x3*Y4+(X3-x3+1)*y3)*2]) );
  130. }
  131.  
  132. void rollsander( int mb, int mx, int my )
  133. {
  134.     int x2, y2, x3, y3;
  135.     mx = wnx(mx);
  136.     my = wny(my);
  137.     do
  138.     {
  139.         MOS_rdpos( &mb, &x2, &y2 );
  140.         x3 = mx - wnx(x2) & NX3;
  141.         y3 = my - wny(y2) & NY3;
  142.         rollsub( x3, y3, NX1, NY1, NX3, NY3 );
  143.         wkk();
  144.         mx = wnx(x2);
  145.         my = wny(y2);
  146.     }    while (mb);
  147. }
  148.  
  149. /*    編集窓用機能軍    */
  150.  
  151. void mpaint( int mb, int mx, int my )
  152. {
  153.     char pa[4];
  154.     EGB_paintMode( work, 0x22 );
  155.     EGB_color( work, 2, mcl[mb] );
  156.     WORD(pa) = wnx(mx);
  157.     WORD(pa+2) = wny(my);
  158.     EGB_closePaint( work, pa );
  159.     wkk();
  160. }
  161.  
  162. void mdr( int mb, int mx, int my )    /*    編集窓描画    */
  163. {
  164.     int mx2, my2, x, y, x2, y2;
  165.     mx2 = mx;
  166.     my2 = my;
  167.     while (mb != 0 && mx/bi >= WX1 && mx/bi <= WX2 &&
  168.                       my/bi >= WY1 && my/bi <= WY2 )
  169.     {
  170.         line( wnx(mx2), wny(my2), wnx(mx), wny(my), mcl[mb] );
  171.         x = wnx(mx);
  172.         x2 = wnx(mx2);
  173.         bsz( &x, &x2 );
  174.         y = wny(my);
  175.         y2 = wny(my2);
  176.         bsz( &y, &y2 );
  177.         egbget( x, y, x2, y2, b );
  178.         egbputZ( WX1+(x-NX1)*KS, WY1+(y-NY1)*KS,
  179.                  WX1+(x2-NX1+1)*KS-1, WY1+(y2-NY1+1)*KS-1,
  180.                  x2-x+1, y2-y+1, b );
  181.         mx2 = mx;
  182.         my2 = my;
  183.         MOS_rdpos( &mb, &mx, &my );
  184.     }
  185. }
  186.  
  187. void mwwp( int *mb, int *mx, int *my, int *x, int *y, void (*fp)() )
  188. {
  189.     int x2, y2, b2;
  190.     view( WX1,WY1, WX2,WY2 );
  191.     umosv( WX1,WY1, WX2,WY2 );
  192.     EGB_writeMode( work, 4 );
  193.     *mx = wcx(*mx);
  194.     *my = wcy(*my);
  195.     fp( *mx, *my, *mx, *my, 0x7fff );
  196.     x2 = *mx;
  197.     y2 = *my;
  198.     do
  199.     {
  200.         b2 = *mb;
  201.         MOS_rdpos( mb, x, y );
  202.         *x = wcx(*x);
  203.         *y = wcy(*y);
  204.         if (*x != x2 || *y != y2 )
  205.         {
  206.             fp( *mx, *my, x2, y2, 0x7fff );
  207.             fp( *mx, *my, *x, *y, 0x7fff );
  208.         }
  209.         x2 = *x;
  210.         y2 = *y;
  211.     }    while (*mb);
  212.     *mb = b2;
  213. }
  214.  
  215. void mline( int mb, int mx, int my, void (*vic)() )
  216. {
  217.     int x, y;
  218.     mwwp( &mb, &mx, &my, &x, &y, vic );
  219.     view( NX1,NY1, NX2,NY2 );
  220.     mosv( 0,0, 639,479 );
  221.     EGB_writeMode( work, 0 );
  222.     vic( nbx(mx), nby(my), nbx(x), nby(y), mcl[mb] );
  223.     wkk();
  224. }
  225.  
  226. void mcpyl( int mb, int mx, int my, int c )
  227. {
  228.     int x, y, x2, y2, x3, y3;
  229.     char a[64*64*2];
  230.     mwwp( &mb, &mx,&my, &x,&y, boxb );
  231.     bsz( &mx, &x );
  232.     bsz( &my, &y );
  233.     egbget( nbx(mx),nby(my), nbx(x),nby(y), a );
  234.     mbin( &mb, &x3, &y3 );
  235.     if (mb == 1)
  236.     {
  237.         if (c)
  238.         {
  239.             EGB_writeMode( work, 0 );
  240.             boxf(wnx(mx),wny(my), wnx(x), wny(y), mcl[2] );
  241.             EGB_writeMode( work, 4 );
  242.         }
  243.         x3 = wcx(x3);
  244.         y3 = wcy(y3);
  245.         mx -= x3;
  246.         my -= y3;
  247.         x -= x3;
  248.         y -= y3;
  249.         do
  250.         {
  251.             MOS_rdpos( &mb, &x2, &y2 );
  252.             x2 = wcx(x2);
  253.             y2 = wcy(y2);
  254.             while ( x2+x > WX2 )
  255.                 x2-=KS;
  256.             while ( y2+y > WY2 )
  257.                 y2-=KS;
  258.             while ( x2+mx < WX1 )
  259.                 x2+=KS;
  260.             while ( y2+my < WY1 )
  261.                 y2+=KS;
  262.             if (x3 != x2 || y3 != y2 )
  263.             {
  264.                 boxb( x3+mx,y3+my, x3+x,y3+y, 0x7fff );
  265.                 boxb( x2+mx,y2+my, x2+x,y2+y, 0x7fff );
  266.             }
  267.             x3 = x2;
  268.             y3 = y2;
  269.         }    while (mb);
  270.         view( NX1,NY1, NX2,NY2 );
  271.         EGB_writeMode( work, 0 );
  272.         egbput( nbx(x3+mx),nby(y3+my), nbx(x3+x),nby(y3+y), a );
  273.     }
  274.     EGB_writeMode( work, 0 );
  275.     mosv( 0,0, 639,479 );
  276.     wkk();
  277. }
  278.  
  279. void mnw( int mb, int mx, int my )        /*    編集窓    */
  280. {
  281.     view( NX1, NY1, NX2, NY2 );
  282.     switch(mei[0])
  283.     {
  284.     case 1:    mline( mb, mx, my, line );        break;
  285.     case 2:    mline( mb, mx, my, boxb );        break;
  286.     case 3:    mline( mb, mx, my, boxf );        break;
  287.     case 4:    mline( mb, mx, my, circlen2 );    break;
  288.     case 5:    mline( mb, mx, my, circlef2 );    break;
  289.     case 6:    mpaint( mb, mx, my );            break;
  290.     case 7:    rollsander( mb, mx, my );        break;
  291.     case 8: mcpyl( mb, mx, my, 0 );            break;
  292.     default:    mdr( mb, mx, my );            break;
  293.     }
  294.     view( 0, 0, 1024/bi-1, 512/bi-1 );
  295. }
  296.  
  297. void mbwk( int mx, int my, int c )    /*    バッファセット用枠    */
  298. {
  299.     static int x = 0, y = 512, c2 = 0;
  300.     int mx2, my2;
  301.     if ( mx/bi < BX1 || mx/bi > BX2 || my/bi < BY1 || my/bi > BY2 )
  302.     {
  303.         c = 0;
  304.     }
  305.     if ( c == 0 )
  306.     {
  307.         if ( c2 != 0 )
  308.         {
  309.             wpg(0);
  310.             boxb( x, y, x+NX4*bi-1, y+NY4*bi-1, 0 );
  311.             wpg(1);
  312.         }
  313.     }    else    {
  314.         mx2 = gpx(mx)*bi;
  315.         my2 = gpy(my)*bi;
  316.         if ( x != mx2 || y != my2 || c2 == 0 )
  317.         {
  318.             wpg(0);
  319.             boxb( x, y, x+NX4*bi-1, y+NY4*bi-1, 0 );
  320.             boxb( mx2, my2, mx2+NX4*bi-1, my2+NY4*bi-1, 15 );
  321.             wpg(1);
  322.             x = mx2;
  323.             y = my2;
  324.         }
  325.     }
  326.     c2 = c;
  327. }
  328.  
  329. void bfsrgp( int mb, int mx, int my )    /*    重ね合わせ    */
  330. {
  331.     egbget( NX1, NY1, NX2, NY2, b );
  332.     bfgp( mb, mx, my );
  333.     if (mb == 2)
  334.     {
  335.         EGB_writeMode( work, 6 );
  336.         EGB_color( work, 3, mcl[2] );
  337.         egbput( NX1, NY1, NX2, NY2, b );
  338.         EGB_writeMode( work, 0 );
  339.         wkk();
  340.         mbout( &mb, &mx, &my );
  341.     }
  342. }
  343.  
  344. void bfdraw( int mb, int mx, int my )
  345. {
  346.     int mx2, my2;
  347.     mx2 = mx;
  348.     my2 = my;
  349.     while (mb != 0)    {
  350.         if (mx2/bi >= BX1 && mx2/bi <= BX2 &&
  351.             my2/bi >= BY1 && my2/bi <= BY2 )    {
  352.             line( mx2/bi, my2/bi, mx/bi, my/bi, mcl[mb] );
  353.         }    else    {
  354.             break;
  355.         }
  356.         mx2 = mx;
  357.         my2 = my;
  358.         MOS_rdpos( &mb, &mx, &my );
  359.     }
  360. }
  361.  
  362. void brolls( int mb, int mx, int my )
  363. {
  364.     int x2, y2, x3, y3;
  365.     mx= mx/bi;
  366.     my = my/bi;
  367.     do
  368.     {
  369.         MOS_rdpos( &mb, &x2, &y2 );
  370.         x3 = mx - x2/bi & BX3;
  371.         y3 = my - y2/bi & BY3;
  372.         rollsub( x3, y3, BX1, BY1, BX3, BY3 );
  373.         mx = x2/bi;
  374.         my = y2/bi;
  375.     }    while (mb);
  376. }
  377.  
  378. void mbuff( int mb, int mx, int my )        /*    バッファ    */
  379. {
  380.     view( BX1, BY1, BX2, BY2 );
  381.     switch (mei[1])
  382.     {
  383.     case 1:        bfsrgp( mb, mx, my );    break;
  384.     case 2:        bfdraw( mb, mx, my );    break;
  385.     case 3:        brolls( mb, mx, my );    break;
  386.     default:    bfgp( mb, mx, my );        break;
  387.     }
  388.     view( 0, 0, 1024/bi-1, 512/bi-1 );
  389. }
  390.  
  391. void mosmen(int mb, int mx, int my)
  392. {
  393.     static char nn[FILENAME_MAX];
  394.  
  395.     switch(MEN_menu( mb, mx, my ))
  396.     {
  397.     case 1:
  398.         message2(4, "G-Pen16    ver.0.720", "",
  399.                     __DATE__" "__TIME__" Compiled.",
  400.                     "Copyright(C) 1991-1994 OKOME", 1);
  401.         break;
  402.     case 101:
  403.         if (OKM_fsel( nn, "TIFFload", 0 ) == 0) {
  404.             EGB_color(work, 0, mcl[1]);
  405.             tiffload(nn, BX1, BY1);
  406.         }
  407.         break;
  408.     case 102:
  409.         if (OKM_fsel( nn, "TIFFsave", 0 ) == 0)
  410.             if (sachk(nn) == 0)
  411.                 tiffsave(nn, BX1, BY1, BX2, BY2, 0, 0);
  412.         break;
  413.     case 103:
  414.         if (OKM_fsel( nn, "SPRITEload",0 ) == 0)
  415.             sprload( nn, BX1, BY1 );
  416.         break;
  417.     case 104:
  418.         if (OKM_fsel( nn, "SPRITEsave",0 ) == 0)
  419.             sprsave( nn, BX1, BY1 );
  420.         break;
  421.     case 301:
  422.         udten( NX1, NY1, NX2, NY2 );
  423.         wkk();
  424.         break;
  425.     case 302:
  426.         lrten( NX1, NY1, NX2, NY2 );
  427.         wkk();
  428.         break;
  429.     case 303:
  430.         wpg(0);
  431.         wkugiri(3);
  432.         wpg(1);
  433.         break;
  434.     case 304:
  435.         wpg(0);
  436.         wkugiri(2);
  437.         wpg(1);
  438.         break;
  439.     case 9998:
  440.         wsize(mb,1);
  441.         break;
  442.     case 9999:
  443.         end();
  444.         break;
  445.     default:
  446.         break;
  447.     }
  448. }
  449.  
  450.  
  451. void keymod(unsigned int kb)
  452. {
  453.     switch(kb)
  454.     {
  455.     case 0x8016:
  456.     case 0x9:    page(-1);    break;
  457.     case 0x8017:
  458.     case 0x1b:    page( 1);    break;
  459.     default:
  460.         if (strchr(MEN_skey,kb-'a'+'A')!=NULL)
  461.             MEN_sideexec(strchr(MEN_skey,kb-'a'+'A')-MEN_skey+1);
  462.         break;
  463.     }
  464. }
  465.  
  466. void mouse()        /*    マウス総合領域    */
  467. {
  468.     int mb, mx, my, mx2, my2;
  469.     unsigned int kb, en;
  470.     while(1)
  471.     {
  472.         MOS_rdpos( &mb, &mx, &my );
  473.         mx2 = mx / bi;
  474.         my2 = my / bi;
  475.         mbwk( mx, my, ( mei[1] == 2 || mei[1] == 3 ) ? 0 : 1 );
  476.         if ((kb = KYB_read(1,&en)) != 0xffff)
  477.             keymod(kb);
  478.         if (mb)    {
  479.             if ( mx2 >= WX1 && mx2 <= WX2 &&
  480.                  my2 >= WY1 && my2 <= WY2 )
  481.                 mnw( mb, mx, my );    /*    編集窓    */
  482.             else if ( mx2 >= BX1 && mx2 <= BX2 &&
  483.                       my2 >= BY1 && my2 <= BY2 )
  484.                     mbuff( mb, mx, my );    /*    バッファ    */
  485.             else if ( my2 >= PALY && my2 < (PALY+PALB*3) &&
  486.                       mx2 >= PALX && mx2 <  PALX + 128)
  487.                     mcolm( mb, mx, my );    /*    カラーボックス    */
  488.             else if ( mx >= MEX1 && my >= MEY1 && mx < MEX1 + MEX4 * MEX2 &&
  489.                  MEZ0 > (( mx-MEX1 ) / MEX4) + MEX2 * (( my-MEY1 ) /MEY4 ))
  490.                     gmenu( mx, my );    /*    編集メニュー    */
  491.             else if ( mx2 >= PCX1 && mx2 <= PCX2 && 
  492.                       my2 >= PCY1 && my2 <= PCY2 )
  493.                     mcolm2( mb );    /*    ボタンへ色セット    */
  494.             else if ( mx2 >= PRX1 && mx2 <= PRX2 && 
  495.                       my2 >= PRY1 && my2 <= PRY2 )
  496.                     mcols( mcl[2-bc] );
  497.             else if ( mx2 >= PLX1 && mx2 <= PLX2 && 
  498.                       my2 >= PLY1 && my2 <= PLY2 )
  499.                     mcols( mcl[1+bc] );
  500.             if ( mx >= PAX1 && mx <= PAX2 && 
  501.                  my >= PAY1 && my <= PAY2 )
  502.                 pbtn( mb );        /*    ページ変更    */
  503.             if ( mx >= SPX1 && mx <= SPX2 && 
  504.                  my >= SPY1 && my <= SPY2 )
  505.                 mspoit();
  506. /*            if ( mx2 >= CBX1 && mx2 <= CBX2 &&
  507.                  my2 >= CBY1 && my2 <= CBY2 )
  508.                 tclc(mb, mx, my);
  509.             else if ( mx2 >= CBLX1 && mx2 <= CBLX2 &&
  510.                       my2 >= CBLY1 && my2 <= CBLY2 )
  511.                 tcl(mb, 0);
  512.             else if ( mx2 >= CBRX1 && mx2 <= CBRX2 &&
  513.                       my2 >= CBRY1 && my2 <= CBRY2 )
  514.                 tcl(mb, 1);
  515. */            if ( mx2 >= NX1 && mx2 <= NX2 &&
  516.                  my2 >= NY1 && my2 <= NY2 )
  517.                 wsize(mb, 0);
  518.             if ( mx >= HX1 && mx <= HX2 &&
  519.                  my >= HY1 && my <= HY2 )
  520.                 bfgs(mb);
  521.             if ( my < 20 )    /*    MENUバー    */
  522.                 mosmen( mb, mx, my );
  523.         }
  524.     }
  525. }
  526.  
  527. _mwset_up_args()    { return 0; }    /*    argc argvを使わない    */
  528.  
  529. void main()
  530. {
  531.     int i;
  532.     /*    初期化    */
  533.     EGB_init( work, EgbWorkSize );
  534.     EGB_resolution( work, 0, GM0 );
  535.     EGB_resolution( work, 1, GM1 );
  536.     MOS_start( mwork, MosWorkSize );
  537.     MOS_writePage( 0 );
  538.     mosv( 0, 0, 639, 479 );
  539.     MOS_typeRom2( 81, 1, 1, mpat );
  540.     KYB_init();
  541.     KYB_clic( 1 );
  542.     KYB_setcode( 0x0200);
  543.     kkinit(KAN_SCRN16, KAN_MOSON);
  544.     NX1 = nx[3];
  545.     NY1 = ny[3];
  546.     NX4 = 64/bi;
  547.     NY4 = NX4;
  548.     wb = wallb;
  549.     for (i=0; i<5; i++) {
  550.         wallbl[i] = wb;
  551.         wb+= 32<<(i*2);
  552.     }
  553.     wallbl[5] = &(b[256*1024-32768]);
  554.     wb = wallbl[3];
  555.     mcl[1] = 0xf;
  556.     for (vz=2000; vp0 == NULL; vz--) {
  557.         vp0 = (char *)calloc( (vz+1)*BX4*BY4*Cb/8, 1 );
  558.     }
  559.     vp = vp0;
  560.     draw();        /*    画面作り    */
  561.     mouse();    /*    メインへ    */
  562. }
  563.